package cn.aigoubuy.domain;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * 购物车对象
 * //2个属性3个方法
 */
public class Cart {
    /**
     * 1.定义一个购物项的集合的属性，用于维护所有的购物项
     * 1)map.key:商品的id
     * 2)map.value: 购物项
     * pid<===>CartItem
     */
    Map<String, CartItem> map = new HashMap<>();
    // 2.定义购物车中的总计，添加，删除等操作不进行计算，直接获得时一并计算
    private double total = 0;

    // 3.提供购物项集合属性，方便页面获取数据
    public Map<String, CartItem> getMap() {
        return map;
    }

    //返回MAP中所有的值：相当于属性名：catItems
    public Collection<CartItem> getCartItems() {
        return map.values();
    }

    // 4.计算获得总价
    public double getTotal() {
        //向让总计请0
        total = 0;
        //获取到Map中所有的购物项
        Collection<CartItem> values = map.values();
        //遍历所有的购物项,将购物项上的小计相加
        for (CartItem cartItem : values) {
            total += cartItem.getSubTotal();
        }
        return total;
    }

    // 5.1 方法：添加商品到购物车
    public void addCart(Product product, int count) {
        if (product == null) {
            return;
        }
        //通过商品id获得购物项
        CartItem cartItem = map.get(product.getPid());
        // 第一次加购
        if (cartItem == null) {
            cartItem = new CartItem();
            cartItem.setProduct(product);
            cartItem.setNum(count);
            //将购物项添加到购物车
            map.put(product.getPid(), cartItem);
        } else {
            // 购物车中已有
            cartItem.setNum(cartItem.getNum() + count);
        }
        // 计算总计
        // total += cartItem.getSubTotal(); //存在同一个商品累加
        // total += count*product.getShop_price();
    }

    // 5.2 方法：从购物车中移除购物项
    public void removeCartItem(String pid) {
        //从map中移除购物项
        CartItem cartItem = map.remove(pid);
        //将总计-移除购物项的小计
        // total -= cartItem.getSubTotal();
    }

    // 5.3 方法：清空购物车
    public void clearCart() {
        // 将map集合清空
        map.clear();
        //将总计置为0
        // total = 0;
    }
    /* public void setTotal(double total) {
        this.total = total;
    }
    public void setMap(Map<String, CartItem> map) {
        this.map = map;
    }*/
}